Digital systems can be implemented using off-the-shelf integrated circuits. However, system designers can often reduce cost, increase performance, and/or add capabilities by employing in the system some integrated circuits whose logic functions can be customized. Two common kinds of customizable integrated circuits in digital systems are application-specific integrated circuits (ASICs) and field-programmable gate arrays (FPGAs).
ASICs are designed and manufactured for a particular application. An ASIC includes circuits selected from a library of small logic cells. A typical ASIC also includes large special-purpose blocks that implement widely-used functions, such as a multi-kilobit random-access memory (RAM) or a microprocessor. The logic cells and special-function blocks must be placed at suitable locations on the ASIC and connected by means of wiring.
Field-programmable gate arrays (FPGAs) are another kind of customizable integrated circuit that is common in digital systems. An FPGA is a general-purpose device. It is meant to be configured for a particular application by the system designer.
The design of an integrated circuit (i.e., FPGA and/or ASIC) may require multiple instances of the same functional block. Further, the design may include different physical layouts for each instance of the functional block. The existence of a single version of said functional block that could be used for any of said physical layouts is desirable and would increase design flexibility.